/*
 * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang.ref;


/**
 * 虚引用对象，在收集器确定其引用对象可能被回收后加入队列。
 * 虚引用最常用于调度死后清理操作。
 *
 * <p> 假设垃圾收集器在某个时间点确定一个对象是
 * <a href="package-summary.html#reachability">虚可达的</a>。
 * 此时它将原子地清除对该对象的所有虚引用，以及对从该对象可达的
 * 任何其他虚可达对象的所有虚引用。
 * 同时或稍后，它将把那些已注册到引用队列的新清除的虚引用加入队列。
 *
 * <p> 为了确保可回收对象保持可回收状态，虚引用的引用对象不能被检索：
 * 虚引用的<code>get</code>方法总是返回<code>null</code>。
 *
 * @author   Mark Reinhold
 * @since    1.2
 */

public class PhantomReference<T> extends Reference<T> {

    /**
     * 返回此引用对象的引用对象。由于虚引用的引用对象总是不可访问的，
     * 此方法总是返回<code>null</code>。
     *
     * @return  <code>null</code>
     */
    public T get() {
        return null;
    }

    /**
     * 创建一个引用给定对象并注册到给定队列的新虚引用。
     *
     * <p> 可以创建一个具有<tt>null</tt>队列的虚引用，但这样的引用完全无用：
     * 其<tt>get</tt>方法将总是返回{@code null}，并且由于它没有队列，
     * 它永远不会被加入队列。
     *
     * @param referent 新虚引用将引用的对象
     * @param q 引用要注册到的队列，如果不需要注册则为<tt>null</tt>
     */
    public PhantomReference(T referent, ReferenceQueue<? super T> q) {
        super(referent, q);
    }

}
